﻿/** 
 *   Nivel: Detalles comunes a todos los niveles
 *  
 *   @see Partida Nivel Mapa
 *   @author 1-DAI IES San Vicente 2010/11
 */

/* --------------------------------------------------
   Versiones hasta la fecha:
   
   Num.   Fecha       Por / Cambios
   ---------------------------------------------------
   0.02  20-Ene-2011  Héctor Pastor
                      Creada la clase Nivel, desglosando sus funcionalidades
                        a partir de "Mapa".
                        
   0.03  20-Ene-2011  Héctor Pastor
   					  Añadidos mas tiles
                      
 ---------------------------------------------------- */

using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics;
public class Nivel
{

    // Datos del mapa del nivel actual
    //ContentManager c;

    private int altoMapa = 14, anchoMapa = 15;
    private int anchoTile = 32, altoTile = 32;
    private int margenIzqdo = 160, margenSuperior = 96;
	
    //TODO: Meter los tiles en un array para que no hayan tantos
    
    ElemGrafico suelo1, suelo2, suelo3, suelo4, suelo5, suelo6, 
        suelo7, suelo8, sueloBarril, barrilSuperior, sueloEscalera1,
        suelo21, suelo22, suelo23, suelo24, suelo25, suelo26, suelo27, 
        suelo28, suelo29, suelo210, suelo211, suelo212, suelo213,
        entrePiso1y2parte1, entrePiso1y2parte2, entrePiso1y2parte3, 
        entrePiso1y2parte4, barrilesEscenario, sueloEscaleraInferior1, suelo31,
        suelo32, suelo33, suelo34, suelo35, suelo36, suelo37, suelo38, suelo39, 
        suelo310, suelo311, suelo312, suelo313, marcadorBonus, doncella,
        escaleraDoble, escalera;

    string[] datosNivel;  // Datos en el momento de juego

    protected string[] datosNivelIniciales =  // Datos para reiniciar
    {"LLLLLLLLLLLLLLLLLLLL1LLLLLLLLLLL",
     "L                              L",
     "L                              L",
     "L                              L",
     "L                              L", 
     "L                              L", 
     "L                              L", 
     "L                              L", 
     "L                              L", 
     "L                              L", 
     "L                              L", 
     "L                              L", 
     "L                              L", 
     "L                            PPL",
     "L                            PPL",
     "LSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSL"};
  
    // Constructor
    public Nivel(ContentManager c)
    {
        //miPartida = p;   // Para enlazar con el resto de componentes

        suelo1 = new ElemGrafico("suelo1", c);
        suelo2 = new ElemGrafico("suelo2", c);
        suelo3 = new ElemGrafico("suelo3", c);
        suelo4 = new ElemGrafico("suelo4", c);
        suelo5 = new ElemGrafico("suelo5", c);
        suelo6 = new ElemGrafico("suelo6", c);
        suelo7 = new ElemGrafico("suelo7", c);
        suelo8 = new ElemGrafico("suelo8", c);
        suelo21 = new ElemGrafico("sueloPiso21", c);
        suelo22 = new ElemGrafico("sueloPiso22", c);
        suelo23 = new ElemGrafico("sueloPiso23", c);
        suelo24 = new ElemGrafico("sueloPiso24", c);
        suelo25 = new ElemGrafico("sueloPiso25", c);
        suelo26 = new ElemGrafico("sueloPiso26", c);
        suelo27 = new ElemGrafico("sueloPiso27", c);
        suelo28 = new ElemGrafico("sueloPiso28", c);
        suelo29 = new ElemGrafico("sueloPiso29", c);
        suelo210 = new ElemGrafico("sueloPiso210", c);
        suelo211 = new ElemGrafico("sueloPiso211", c);
        suelo212 = new ElemGrafico("sueloPiso212", c);
        suelo213 = new ElemGrafico("sueloPiso213", c);
        suelo31 = new ElemGrafico("suelopiso31", c);
        suelo32 = new ElemGrafico("suelopiso32", c);
        suelo33 = new ElemGrafico("suelopiso33", c);
        suelo34 = new ElemGrafico("suelopiso34", c);
        suelo35 = new ElemGrafico("suelopiso35", c);
        suelo36 = new ElemGrafico("suelopiso36", c);
        suelo37 = new ElemGrafico("suelopiso37", c);
        suelo38 = new ElemGrafico("suelopiso38", c);
        suelo39 = new ElemGrafico("suelopiso39", c);
        suelo310 = new ElemGrafico("suelopiso310", c);
        suelo311 = new ElemGrafico("suelopiso311", c);
        suelo312 = new ElemGrafico("suelopiso312", c);
        suelo313 = new ElemGrafico("suelopiso313", c);
        marcadorBonus = new ElemGrafico("marcadorBonus", c);
        doncella = new ElemGrafico("doncella", c);
        entrePiso1y2parte1 = new ElemGrafico("entrePisos1y21", c);
        entrePiso1y2parte2 = new ElemGrafico("entrePisos1y22", c);
        entrePiso1y2parte3 = new ElemGrafico("entrePisos1y23", c);
        entrePiso1y2parte4 = new ElemGrafico("entrePisos1y24", c);
        barrilesEscenario = new ElemGrafico("barrilesEscenario", c);
        sueloEscalera1 = new ElemGrafico("sueloEscalera1", c);
        sueloEscaleraInferior1 
        	= new ElemGrafico("sueloEscaleraInferior2", c);
        escalera = new ElemGrafico("escalera", c);
        escaleraDoble = new ElemGrafico("escaleraDoble", c);
        sueloBarril = new ElemGrafico("sueloBarril", c);
		barrilSuperior = new ElemGrafico("BarrilSuperior", c);
        datosNivel = new string[altoMapa];
        Reiniciar();
  }

   public void Reiniciar()
   {
       for (int fila = 0; fila < altoMapa; fila++)
           datosNivel[fila] = datosNivelIniciales[fila];
   }

   public void DibujarOculta(SpriteBatch s)
   {
      // Dibujo el fondo
      for (int fila = 0; fila < altoMapa; fila++)
          for (int colum = 0; colum < anchoMapa; colum++)
          {
              int posX = colum * anchoTile + margenIzqdo;
              int posY = fila * altoTile + margenSuperior;
              switch (datosNivel[fila][colum])
              {
                  case '1': suelo1.DibujarOculta(posX, posY, s); break;
                  case '2': suelo2.DibujarOculta(posX, posY, s); break;
                  case '3': suelo3.DibujarOculta(posX, posY, s); break;
                  case '4': suelo4.DibujarOculta(posX, posY, s); break;
                  case '5': suelo5.DibujarOculta(posX, posY, s); break;
                  case '6': suelo6.DibujarOculta(posX, posY, s); break;
                  case '7': suelo7.DibujarOculta(posX, posY, s); break;
                  case '8': suelo8.DibujarOculta(posX, posY, s); break;
                  case 'q': suelo21.DibujarOculta(posX, posY, s); break;
                  case 'w': suelo22.DibujarOculta(posX, posY, s); break;
                  case 'e': suelo23.DibujarOculta(posX, posY, s); break;
                  case 'r': suelo24.DibujarOculta(posX, posY, s); break;
                  case 't': suelo25.DibujarOculta(posX, posY, s); break;
                  case 'y': suelo26.DibujarOculta(posX, posY, s); break;
                  case 'i': suelo27.DibujarOculta(posX, posY, s); break;
                  case 'o': suelo28.DibujarOculta(posX, posY, s); break;
                  case 'p': suelo29.DibujarOculta(posX, posY, s); break;
                  case 'a': suelo210.DibujarOculta(posX, posY, s); break;
                  case 's': suelo211.DibujarOculta(posX, posY, s); break;
                  case 'd': suelo212.DibujarOculta(posX, posY, s); break;
                  case 'x': suelo213.DibujarOculta(posX, posY, s); break;
                  case 'Q': suelo31.DibujarOculta(posX, posY, s); break;
                  case 'W': suelo32.DibujarOculta(posX, posY, s); break;
                  case 'R': suelo33.DibujarOculta(posX, posY, s); break;
                  case 'T': suelo34.DibujarOculta(posX, posY, s); break;
                  case 'Y': suelo35.DibujarOculta(posX, posY, s); break;
                  case 'U': suelo36.DibujarOculta(posX, posY, s); break;
                  case 'I': suelo37.DibujarOculta(posX, posY, s); break;
                  case 'O': suelo38.DibujarOculta(posX, posY, s); break;
                  case 'P': suelo39.DibujarOculta(posX, posY, s); break;
                  case 'A': suelo310.DibujarOculta(posX, posY, s); break;
                  case 'S': suelo311.DibujarOculta(posX, posY, s); break;
                  case 'D': suelo312.DibujarOculta(posX, posY, s); break;
                  case 'F': suelo313.DibujarOculta(posX, posY, s); break;
                  case 'v': escaleraDoble.DibujarOculta(posX, posY, s); break;
                  case 'B': barrilesEscenario.DibujarOculta(posX, posY, s); break;
                  case 'f': entrePiso1y2parte1.DibujarOculta(posX, posY, s); break;
                  case 'g': entrePiso1y2parte2.DibujarOculta(posX, posY, s); break;
                  case 'h': entrePiso1y2parte3.DibujarOculta(posX, posY, s); break;
                  case 'j': entrePiso1y2parte4.DibujarOculta(posX, posY, s); break;
                  case 'k': sueloEscaleraInferior1.DibujarOculta(posX, posY, s); break;
                  case 'E': sueloEscalera1.DibujarOculta(posX, posY, s); break;
                  case 'u': sueloBarril.DibujarOculta(posX, posY, s); break;
                  case 'n': barrilSuperior.DibujarOculta(posX, posY, s); break;
                  case 'M': marcadorBonus.DibujarOculta(posX, posY, s); break;
                  case 'm': doncella.DibujarOculta(posX, posY, s); break;
                  case 'V': escalera.DibujarOculta(posX, posY, s); break;
              }
          }
   }

   public bool EsPosibleMover(int x, int y, int xmax, int ymax)
   {
        
       // Compruebo si choca con alguna casilla del fondo
       for (int fila = 0; fila < altoMapa; fila++)
              for (int colum = 0; colum < anchoMapa; colum++)
              {
                  int posX = colum * anchoTile + margenIzqdo;
                  int posY = fila * altoTile + margenSuperior;
                  // Si se solapa con la posic a la que queremos mover
                  if ((posX+anchoTile > x) && (posY+altoTile > y)  
                      && (xmax> posX) && (ymax > posY))
                      // Y no es espacio blanco
                      if (datosNivel[fila][colum] != ' ')
                      {
                          return false;
                      }
               }

       return true;
   }
  
} /* fin de la clase Mapa */
